﻿<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <script language="javascript" type="text/javascript" src="/Js/load.js?v=050E3FBC"></script>
    <title>远程表达式链 - C# 高性能自动化服务端框架 - 凹凸架构</title>
        <style type="text/css">
        a{text-decoration: none;}
        a:hover{text-decoration: underline;}
    </style>
</head>
<body>
    <p>
        <b>远程表达式链</b>是一个可独立于具体 RPC 实现的通用组件，可以用于实现内部服务无 API 化，客户端可以灵活自主的调用服务端暴露的字段 / 属性 / 函数。
        <br /><b>该功能需要在工程项目中配置<a href="/CodeGenerator.html?v=50E3FBC">静态代码生成</a>。</b>
    </p>
    <p>1. 根据需求给需要暴露的 class / struct 添加 <b>partial</b> 修饰符，如果该 class 是一个嵌套类型，需要给所有上级 class 都添加 <b>partial</b> 修饰符，因为<a href="/CodeGenerator.html?v=50E3FBC">静态代码生成</a>需要与它公用同一个类型以生成远程表达式节点信息。</p>
    <p>2. 给该 class / struct 添加远程表达式类型申明配置 <b>[AutoCSer.Net.RemoteExpression.Type]</b>，并给需要暴露的成员添加远程表达式成员申明配置 <b>[AutoCSer.Net.RemoteExpression.Member]</b>。</p>
    <p>3. 给该工程项目配置<a href="/CodeGenerator.html?v=50E3FBC">静态代码生成</a>并编译项目，然后将生成的远程表达式节点信息代码源文件 <b>{项目名称}.AutoCSer.cs</b> 添加到项目中。由于远程表达式节点信息可能存在相互引用，<b>可能需要连续编译三次</b>调用代码生成才能生成包含完整的远程表达式节点信息代码的程序集。</p>
    <p>
        <a href="/Index.html?v=50E3FBC" title="Go to the home page to download">AutoCSer</a> 中的 RPC 框架都集成支持<b>远程表达式链</b>，但是由于安全问题默认是禁用状态，需要在相关服务的申明配置中设置 <b>IsRemoteExpression = true</b>，比如
        <div>启用支持远程表达式支持 参考示例 <a href="/Index.html?v=50E3FBC" title="Go to the home page to download">AutoCSer</a>\Example\<a id="GetCode1" href="javascript:AutoCSer.Web.Include.GetCode.Get('Example','1');">TcpStaticServer\RefOut.cs</a></div>
        <div>内部静态服务（含泛型示例） 参考示例 <a href="/Index.html?v=50E3FBC" title="Go to the home page to download">AutoCSer</a>\Example\<a id="GetCodeg" href="javascript:AutoCSer.Web.Include.GetCode.Get('Example','g');">TcpStaticServer\Expression.cs</a></div>
    </p>
    <p>
        下面是各 RPC 框架的调用示例
    </p>
    <p>
        TCP 接口服务框架
        <div>内部服务 参考示例 <a href="/Index.html?v=50E3FBC" title="Go to the home page to download">AutoCSer</a>\Example\<a id="GetCode2" href="javascript:AutoCSer.Web.Include.GetCode.Get('Example','2');">TcpInterfaceServer\Expression.cs</a></div>
        <div>开放服务 参考示例 <a href="/Index.html?v=50E3FBC" title="Go to the home page to download">AutoCSer</a>\Example\<a id="GetCode3" href="javascript:AutoCSer.Web.Include.GetCode.Get('Example','3');">TcpInterfaceOpenServer\Expression.cs</a></div>
    </p>
    <p>
        TCP 函数服务框架
        <div>内部静态服务（含泛型示例） 参考示例 <a href="/Index.html?v=50E3FBC" title="Go to the home page to download">AutoCSer</a>\Example\<a id="GetCode4" href="javascript:AutoCSer.Web.Include.GetCode.Get('Example','4');">TcpStaticServer\Expression.cs</a></div>
        <div>内部实例服务 参考示例 <a href="/Index.html?v=50E3FBC" title="Go to the home page to download">AutoCSer</a>\Example\<a id="GetCode5" href="javascript:AutoCSer.Web.Include.GetCode.Get('Example','5');">TcpInternalServer\Expression.cs</a></div>
        <div>开放服务 参考示例 <a href="/Index.html?v=50E3FBC" title="Go to the home page to download">AutoCSer</a>\Example\<a id="GetCode6" href="javascript:AutoCSer.Web.Include.GetCode.Get('Example','6');">TcpOpenServer\Expression.cs</a></div>
    </p>
    <p>
        TCP 接口同步应答服务框架
        <div>内部服务 参考示例 <a href="/Index.html?v=50E3FBC" title="Go to the home page to download">AutoCSer</a>\Example\<a id="GetCodec" href="javascript:AutoCSer.Web.Include.GetCode.Get('Example','c');">TcpInterfaceSimpleServer\Expression.cs</a></div>
        <div>开放服务 参考示例 <a href="/Index.html?v=50E3FBC" title="Go to the home page to download">AutoCSer</a>\Example\<a id="GetCoded" href="javascript:AutoCSer.Web.Include.GetCode.Get('Example','d');">TcpInterfaceOpenSimpleServer\Expression.cs</a></div>
    </p>
    <p>
        TCP 函数同步应答服务框架
        <div>内部静态服务 参考示例 <a href="/Index.html?v=50E3FBC" title="Go to the home page to download">AutoCSer</a>\Example\<a id="GetCodee" href="javascript:AutoCSer.Web.Include.GetCode.Get('Example','e');">TcpStaticSimpleServer\Expression.cs</a></div>
        <div>内部实例服务 参考示例 <a href="/Index.html?v=50E3FBC" title="Go to the home page to download">AutoCSer</a>\Example\<a id="GetCodef" href="javascript:AutoCSer.Web.Include.GetCode.Get('Example','f');">TcpInternalSimpleServer\Expression.cs</a></div>
        <div>开放服务 参考示例 <a href="/Index.html?v=50E3FBC" title="Go to the home page to download">AutoCSer</a>\Example\<a id="GetCodeh" href="javascript:AutoCSer.Web.Include.GetCode.Get('Example','h');">TcpOpenSimpleServer\Expression.cs</a></div>
    </p>
</body>
</html>